package com.etc.reflectdemo;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Arrays;

/**
 * @author: knowno
 * @create: 2024-09-18 10:56
 * @Version 1.0
 **/
public class TestPerson2 {
    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
        //以前的操作想new就new ->主动去new
        Person person = new Person();


        System.out.println("*****************************");
        //有一个新的方法=> 工具(工厂) 批量创建 [配置文件中标记  类所在的包的字符串格式] Class.forName()
        Class<Person> personClass = Person.class;
        // 1  newInstance
        Person person1 = personClass.newInstance();

        //2 获取构造方法
        System.out.println("*********** getConstructors 所有公共构造方法 ****************");
        Constructor<?>[] constructors = personClass.getConstructors();

        System.out.println(constructors.length);

        System.out.println("*********** getDeclaredConstructors 所有构造方法 包括私有****************");

        Constructor<?>[] declaredConstructors = personClass.getDeclaredConstructors();
        System.out.println(declaredConstructors.length);

        System.out.println("*********** getFields  的所有可访问的公共字段 类对象 字段(属性)****************");

        Field[] fields = personClass.getFields();
        System.out.println(Arrays.toString(fields));
        System.out.println("*********** getDeclaredFields  类或接口声明的所有字段 类对象(属性)****************");

        Field[] declaredFields = personClass.getDeclaredFields();
        System.out.println(Arrays.toString(declaredFields));

        System.out.println("*********** getMethods  类或接口声明的所有公共方法****************");
        Method[] methods = personClass.getMethods();

        System.out.println("*********** getDeclaredMethods  类或接口声明的所有方法****************");
        Method[] declaredMethods = personClass.getDeclaredMethods();





    }
}
